package com.test.designmode.decorator;

/**
 * 父类作为抽象类时，实现目标对象的接口
 */
public abstract class ShapeDecorator implements Shape {

    //抽象类的成员变量
    //抽象类中引用接口-应声明为protected受保护的
    protected Shape decoratedShape;

    //抽象类的构造方法：用于子类访问父类数据的初始化
    //子类构造器初始化的同时也初始化了父类的构造器
    public ShapeDecorator(Shape decoratedShape){
        this.decoratedShape = decoratedShape;
        System.out.println("init 装饰器父类构造器初始化了Shape");
    }

    //这里不会执行，因为子类再次重写了draw方法
    @Override
    public void draw(){
        System.out.println("调用目标接口的draw方法");
        decoratedShape.draw();
    }
}